/* 
* The copyright in this software is being made available under the following 
* TNO license terms. This software may be subject to other third party and 
* TNO intellectual property rights, including patent rights, 
* and no such rights are granted under this license.
*
* Created by Jorrit van den Berg on 7/12/15.
* Copyright (c) 2016, TNO.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
*  * Redistributions of source code must retain the above copyright notice,
*    this list of conditions and the following disclaimer.
*  * Redistributions in binary form must reproduce the above copyright notice,
*    this list of conditions and the following disclaimer in the documentation
*    and/or other materials provided with the distribution.
*  * Neither the name of TNO nor the names of its employees may
*    be used to endorse or promote products derived from this software without
*    specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY TNO "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL TNO
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/

function crossOriginRequest (url, callback){
    
    var isIE8 = window.XDomainRequest ? true : false;
    var invocation = createCrossOriginRequest();

    function createCrossOriginRequest(url, crossOriginRequestHandler) {
      var request;
      if (isIE8) {
        request = new window.XDomainRequest();
        }
        else {
          request = new XMLHttpRequest();
        }
      return request;
    }

    function callOtherDomain() {
      if (invocation) {
        if(isIE8) {
          invocation.onload = crossOriginRequestHandler;
          invocation.open("GET", url, true);
          invocation.send();
        }
        else {
          invocation.open('GET', url, true);
          invocation.onreadystatechange = crossOriginRequestHandler;
          invocation.send();
        }
      }
      else {
        console.log("callOtherDomain: " + "No Invocation TookPlace At All");
      }
    }

    function crossOriginRequestHandler(evtXHR) {
      if (invocation.readyState == 4) {
          if (invocation.status == 200) {
              var response = invocation.responseText;
              
              callback(null, response);
          }
          else {
              callback(invocation.statusText, null);
              console.log("crossOriginRequestHandler: " + "Invocation Errors Occured");
          }
      }
    }
    
    callOtherDomain();
}


